package com.wholesmart.web.controller;

import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.wholesmart.common.bean.Message;
import com.wholesmart.common.bean.Page;
import com.wholesmart.mapper.entity.Member;
import com.wholesmart.mapper.entity.MemberExtrainformation;
import com.wholesmart.service.MemberService;

/**
 * 成员管理控制器
 * 
 * <pre>
* 开发约定：
* 
* 1、分页查询接口只显示成员的基本信息。
* 
* 2、在每条数据后提供“详情”按钮用于加载成员的附加信息。
* 
* 3、提供逻辑删除和真是删除成员接口。
* 
* 4、提供成员的导入导出接口。
 * </pre>
 * 
 * @author dyw
 * @date 2020年1月9日
 */
@RestController
@RequestMapping("/member")
public class MemberController {
	@Autowired
	private MemberService memberService;

	/**
	 * 分页条件查询
	 * 
	 * <pre>
	 * 有效查询条件包括：部门ID（精确匹配），  姓名（模糊匹配），   性别（数据字典精确匹配），  是否是部门负责人（精确匹配）
	 * 
	 * {"page":{
	 *     "pageSize":10,
	 *     "currentPage":1,
	 *     "orderFile":"id",
	 *     "orderType":"asc"
	 *         },
	 *   "condition"{
	 *      "departmentId":"220",
	 *      "name":"dyw",
	 *      "gender":"1",
	 *      "leaderSign":"true"
	 *         }
	 *   }
	 * </pre>
	 *
	 * @param params 分页和条件参数
	 * @return 返回未逻辑删除的用户
	 */
	@PostMapping("/query/page")
	public Message queryPage(@RequestBody Map<String, Object> params) {
		Page<Member> page = memberService.getPage(params);
		return Message.success(page);
	}

	/**
	 * 据成员ID获取成员的附加信息
	 * 
	 * @param id 成员ID
	 * @return 成员的附加信息
	 */
	@GetMapping("/query/memberExtrainfo")
	public Message queryMemberExtrainfo(Long id) {
		MemberExtrainformation extrainfo = memberService.getMemberExtrainfoById(id);
		return Message.success(extrainfo);
	}

	/**
	 * 持久删除成员
	 * 
	 * @param id 成员ID
	 * @return
	 */
	@GetMapping("/delete")
	public Message deleteMember(Long id) {
		memberService.deleteById(id);
		return Message.success();
	}

	/**
	 * 逻辑删除成员
	 * 
	 * @param id 成员ID
	 * @return
	 */
	@GetMapping("/modify/status")
	public Message modifyMember(Long id) {
		memberService.setStatusById(id);
		return Message.success();
	}

	/**
	 * 更新或保存一条成员信息
	 * 
	 * @param member
	 * @return
	 */
	@PostMapping("/save")
	public Message save(Member member) {
		String id = memberService.save(member);
		return Message.success(id);
	}

	/**
	 * 导入成员数据
	 * 
	 * @param request  包含表单流
	 * @param response 包含导入失败的表单流
	 * @return 包含导入的条数
	 */
	@PostMapping("/importMembers")
	public Message importMembers(MultipartFile file, HttpServletResponse response) {
		Integer num = memberService.importMembers(file, response);
		return Message.success(num);
	}

	/**
	 * 导出成员数据
	 * 
	 * @param request  包含表单流
	 * @param response 包含导入失败的表单流
	 * @return 包含导入的条数
	 */
	@PostMapping("/exportMembers")
	public Message exportMembers(@RequestBody Map<String, Object> params, HttpServletResponse response) {
		Integer num = memberService.exportMembers(params, response);
		return Message.success(num);
	}
}
